package com.skyrhyme.enums;

/*
    权限判断及其他异常使用自定义错误码（调用方法参数传递）
      - `200` - 获取成功
      - `400` - 参数错误
      - `401` - token无效或过期
      - `403` - 权限不足
      - `500` - 服务器错误
*/
public enum Status {
    // 成功状态码
    SUCCESS(200, "OK", "请求成功"),

    // 客户端错误状态码
    BAD_REQUEST(400, "Bad Requset", "参数错误"),
    UNAUTHORIZED(401, "Unauthorized", "未授权"),
    FORBIDDEN(403, "Forbidden", "禁止访问"),
    NOT_FOUND(404, "Not Found", "资源不存在"),

    // 服务端错误状态码
    INTERNAL_SERVER_ERROR(500, "Internal Server Error", "服务器内部错误");

    private final int code;          // 状态码
    private final String enMessage;  // 英文描述
    private final String zhMessage;  // 中文描述

    /**
     * 构造函数
     * @param code 状态码
     * @param enMessage 英文描述
     * @param zhMessage 中文描述
     */
    Status(int code, String enMessage, String zhMessage) {
        this.code = code;
        this.enMessage = enMessage;
        this.zhMessage = zhMessage;
    }

    // Getter方法
    public int getCode() {
        return code;
    }

    public String getEnMessage() {
        return enMessage;
    }

    public String getZhMessage() {
        return zhMessage;
    }

    /**
     * 根据状态码获取枚举实例
     * @param code 状态码
     * @return 对应的枚举实例
     */
    public static Status getByCode(int code) {
        for (Status status : Status.values()) {
            if (status.getCode() == code) {
                return status;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return "HttpStatusEnum{" +
                "code=" + code +
                ", enMessage='" + enMessage + '\'' +
                ", zhMessage='" + zhMessage + '\'' +
                '}';
    }
}
